The invention generally relates to a clock synchronization scheme for deskewing operations in a data interface, such an interface to a memory bus, for example.
A typical memory controller hub, or north bridge, of a computer system includes a memory interface, which establishes communication between the memory controller hub and the memory bus. The memory bus typically skews the data bit signals with respect to the clock signal. Therefore, the memory interface typically implements a scheme to adjust the timing between the data bit and clock signals to compensate for the skewing. In conventional de-skewing schemes, the timing may be adjusted on all of the outgoing data bit signals as a group by adjusting read pointers that point to the data bits in output buffers.
More specifically, a conventional memory interface of a memory controller hub may have a core partition, which furnishes the data that is to be written to the memory. An analog partition of the memory interface generates the clock and data signals that appear on the memory bus; and a high speed input/output (HSIO) partition contains first in first out (FIFO) circuits to handle the clock domain transfer between the core and analog partitions.
A conventional memory interface may delay the clock signal that is sent to the analog I/O partition for purposes of optimizing the channel timing, and after the I/O clock setting is fixed by channel requirements, the I/O partition clock signal triggers the read pointers for all of the FIFOs of the HSIO partition. The FIFOs must be deep enough to absorb the variation differences between the I/O clock tree and the clock signal provided by the core partition. The deeper the FIFO is, the larger the latency and the power dissipation will be. However, such a design may require the FIFOs to be too large to be incorporated into the analog I/O interface. Furthermore, conventional de-skewing schemes do not allow compensation for the individual data bit lines, as the timing is regulated for the data bit lines as a group.
Thus, there is a continuing need for better ways to implement de-skewing in a data, such as a memory interface.